home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok18.lha
/
Profile
/
Profile.LiesMich
< prev
next >
Wrap
Text File
|
1993-08-15
|
7KB
|
224 lines
P r o f i l e
===================
© 1988 by Fridtjof Siebert
Nobileweg 67
7000 Stuttgart 40
Tel.: (0)711/822509
Was?
Dieses Programm ermöglicht es, das Laufzeitverhalten eines Modula-II
Programm zu überprüfen. Es erweitert ein Modula-II Programm um
Informationen über die Anzahl von Schleifendurchläufen und
Prozeduraufrufen. Außerdem wird der Wertebereich numerischer Variablen
bestimmt, und festgestellt, ob die Variablen im Programm überhaupt
jemals Werte zugewiesen bekommen. Die Informationen, die Profile aus
einem Programm holt, werden als Bemerkungen in einen neu erzeugten
Quelltext eingefügt.
Weshalb?
Profile entstand beim Lösen der 3. Aufgabe der 2. Runde des 7.
Bundeswettbewerbs Informatik. Da ich es für ein nützliches Programm
halte, habe ich mich entschlossen, es auch anderen Modula-II
Programmierern zugänglich zu machen.
Wie?
Um ein Programm untersuchen zu lassen, muß zunächst der Profiler
gestartet werden. Ihm kann dann der Name des Quelltextes angegeben
werden.
Aus diesem Text erzeugt er einen neuen Quelltext, der unter dem Namen des
Originaltextes, wobei vor dem Punkt "Pro" eingefügt wird, gespeichert
wird. Es wird also z.B. aus "Test.mod" "TestPro.mod".
Der erzeugte Text muß nun compiliert, gelinkt und ausgeführt werden.
Solange wartet Profile auf die RETURN-Taste. Nachdem das untersuchte
Programm beendet ist, muß diese Taste gedrückt werden. Das Programm hat
in das T:-Directory (T: muß z.B. mit "assign t: ram:" vorher erzeugt
worden sein!) die Datei ProfileData geschrieben, die Informationen über
Schleifendurchläufe, Prozeduraufrufe und Variablenbereiche enthält.
Profile erzeugt nun den neuen Programmtext. Dieser enthält hinter allen
Variablendeklaration, Schleifenköpfen und hinter den BEGINs von
Prozeduren Bemerkungen, die Auskunft über Wertebereich, Anzahl der
Durchläufe und Aufrufe geben.
Einschränkungen:
Leider konnte ich aus Zeit- und Lustmangel das Programm nicht so
schreiben, daß jedes Modula-Programm untersucht werden kann. Folgende
Bedingungen müssen die bearbeiteten Programme erfüllen:
- es dürfen keine lokalen Module verwendet werden.
- Profile verarbeitet keine Importe. Damit dennoch einfache Ein- und
Ausgabeprozeduren, wie z.B. WriteString, ReadInt etc., benutzt werden
können, werden alle importierten Objekte als Prozeduren mit beliebig
vielen Parametern eines beliebigen Typs angesehen. Um Programme, die
importierte Objekte benutzen, dennoch verarbeiten zu können, reicht es
oft, wenn die Teile, in denen die importierten Sachen verwendet werden,
vor dem Starten von Profile mit "(*" und "*)" in eine Bemerkung
umgewandelt werden. Vor der Compilation der Datei XXXPro.mod können die
Bemerkungen in dieser wieder entfernt werden.
- bei zu großen Konstanten (größer als 2 hoch 31) können Bereichsfehler
auftreten, die der Parser nicht abfängt.
- die Prozeduren für REAL-Zahlen habe ich nicht getestet, daher treten
bei deren Verwendung wahrscheinlich Fehler auf.
- variante Records sind nicht erlaubt.
- Vorwärstdeklaration von Prozeduren sind nicht erlaubt.
- Unterbereichstypen sind nicht immer kompatibel zu ihrem ursprünglichen
Typ. Bei Verwendung von Unterbereichstypen werden unberechtigt
Fehlermeldungen ausgegeben.
Es tut mir natürlich Leid, daß ich all diese Einschränkungen
zurückgelassen habe. Ich habe jedoch noch viele andere Dinge zu tun und
bin nicht dazu gekommen, dies zu verbessern.
Beispiel:
Um Profile zu demonstrieren, habe ich folgendes kleines Testprogramm
geschrieben:
MODULE Test;
VAR
v,x: INTEGER;
PROCEDURE Add(VAR a: INTEGER; b: INTEGER): INTEGER;
VAR c: INTEGER;
BEGIN
c := a + b;
RETURN c;
END Add;
BEGIN
v := 0;
WHILE v<100 DO
v := Add(v,5);
END;
END Test.
Der von Profile erzeugte Text Test.pro sieht dann folgendermaßen aus:
MODULE Test;
VAR
v,x: INTEGER;
(* x: Variable nicht benutzt! *)
(* v: min = 0, max = 100 *)
PROCEDURE Add(VAR a: INTEGER; b: INTEGER): INTEGER;
(* a: min = 0, max = 95 *)
(* b: min = 5, max = 5 *)
VAR c: INTEGER;
(* c: min = 5, max = 100 *)
BEGIN
(* 20 Aufrufe *)
c := a + b;
RETURN c;
END Add;
BEGIN
v := 0;
WHILE v<100 DO
(* 20 Durchläufe *)
v := Add(v,5);
END;
END Test.
Es ist also ein sehr übersichtliches und praktisches Ergebnis entstanden.
Da die Zusatztinformationen in Kommentarzeilen eingefügt wurden, kann das
Ergebnis nochmals compiliert werden.
Der Dialog mit dem Profiler sieht folgendermaßen aus:
M2-Profiler -- © 1989 by Fridtjof Siebert.
in> Test.mod
- Test.mod
+ TestPro.mod
-> Bitte TestPro.mod compilieren und starten!
Danach RETURN drücken!
+ Test.pro
in>
tschüß!
Paket:
Folgende Dateien müssen in diesem Directory enthalten sein:
Profile (dir):
.info 47
Demos (dir):
Prim3.mod.info 534
Prim1.info 818
Prim3.mod 558
.info 94
Prim1.mod 275
Prim1 12068
Prim2 12468
Prim3 12292
Prim2.pro 1332
Prim3.pro.info 534
Prim3.info 818
Prim2.mod.info 534
Prim2.pro.info 534
Prim2.info 818
Prim1.mod.info 534
Prim1.pro.info 534
Prim2.mod 1126
Prim3.pro 760
Prim1.pro 407
Demos:47038 /19 All:47038 /19
Profile.info 1270
Demos.info 947
Profile 81344
Profile.LiesMich.info 710
Profile.LiesMich 7209
Profile:91527 /6 All:138565 /25
Copyright:
Profile ist NICHT Public Domain, sondern FREEWARE. Es darf frei kopiert
und an andere weitergegeben werden, dies jedoch nur, mit folgenden
Einschränkungen:
- Das Paket darf nur vollständig weitergegeben werden. Fehlt eine
Datei, ist das Kopieren illegal.
- Es ist nicht erlaubt, Änderungen irgendwelcher Art im Programm oder
den dazu gehörenden Dateien zu machen und diese weiter zu verbreiten.
- Disketten, auf denen dieses Programm vertrieben wird, dürfen
höchstens 8 DM kosten. Einen höheren Preis sehe ich als eine
kommerzielle Nutzung an. Dafür ist diese Programm nicht freigegen.
Wer das Programm nützlich findet, oder irgendwelche Vorschläge für
Verbesserungen oder Kritik hat, schreibe mir bitte.
--- Fridtjof.